import 'package:enterprise_v6_app/app/core/core.dart';
import 'package:enterprise_v6_app/app/core/utils/user_manager.dart';
import 'package:enterprise_v6_app/app/data/common/role_menu_tree_entity.dart';
import 'package:enterprise_v6_app/app/data/entities/application/securtity_base_drawer.dart';
import 'package:enterprise_v6_app/app/modules/application/controller.dart';

/// 模块权限通用方法
class ModulePermissionsUtil {
  ///[titleList] 本模块全部显示的菜单
  ///[menuTreeList] 接口查询出的本模块的菜单
  ///[routes] 模块主页面路由地址
  ///[menuTreeList]或[routes]必传一个
  static void removeRoleMenu({
    required List<SecurityBaseEntity> titleList,
    List<RoleMenuTreeEntity>? menuTreeList,
    String? routes,
  }) {
    List<RoleMenuTreeEntity>? roleMenuList;
    if (menuTreeList == null) {
      //首页controller
      final applyController = Get.find<ApplyController>();
      roleMenuList = applyController.roleMenuMap[routes];
    } else {
      roleMenuList = menuTreeList;
    }
    // 如果为空则清空菜单
    if (roleMenuList == null || roleMenuList.isEmpty) {
      titleList.clear();
      return;
    }
    // 用于存储要删除的元素的索引
    final List<int> indicesToRemove = [];
    // 找到要删除的元素的索引
    for (int i = 0; i < titleList.length; i++) {
      final menu = titleList[i];
      // 判断登录账号是否有模块权限
      // 判断是否存在相同路径相同的对象
      final bool hasCommonPath = roleMenuList.any((obj) => obj.path == menu.path);
      // 不存在添加到删除列表
      if (!hasCommonPath) {
        indicesToRemove.add(i);
      }
    }
    // 从原始列表中删除元素
    for (int index in indicesToRemove.reversed) {
      titleList.removeAt(index);
    }
  }

  /// 我的任务模块处理权限管理
  /// [titleList] 全部可以显示的模块
  static Future<void> removeTaskRoleMenu({required List<SecurityBaseEntity> titleList}) async {
    // 所有的模块列表
    Map<String, List<RoleMenuTreeEntity>> roleMenuMap = Get.find<ApplyController>().roleMenuMap;
    while (roleMenuMap.isEmpty && UserManager.isLoggedIn) {
      await Future.delayed(const Duration(seconds: 1));
      roleMenuMap = Get.find<ApplyController>().roleMenuMap;
    }
    if (roleMenuMap.isEmpty) {
      titleList.clear();
      return;
    }
    // 用于存储要删除的元素的索引
    final List<int> indicesToRemove = [];
    // 找到要删除的元素的索引
    for (int i = 0; i < titleList.length; i++) {
      final menu = titleList[i];
      // 判断登录账号是否有模块权限
      // 判断一级是否存在相同路径的对象
      final bool hasCommonPath = roleMenuMap.keys.any((key) => key == menu.path);
      bool hasCommonPath2 = false;
      // 如果一级不存在，再判断二级是否存在相同路径的对象
      if(!hasCommonPath){
        hasCommonPath2 = roleMenuMap.values.any((value) => value.any((obj) => obj.path == menu.path));
      }
      // 不存在添加到删除列表
      if (!hasCommonPath && !hasCommonPath2) {
        indicesToRemove.add(i);
      }
    }
    // 从原始列表中删除元素
    for (int index in indicesToRemove.reversed) {
      titleList.removeAt(index);
    }
  }
}
